#include "DTD.h"

/**
* Constructeur
*/
DTD::DTD()
{
	// TODO
}

/**
* Constructeur par liste d'éléments et liste de liste d'attributs
*/
DTD::DTD( const vector<DTDElement*>& elements, vector<AttList*>& attList)
{
	vElements = vector<DTDElement*>( elements );
	vAttList = vector<AttList*>( attList );
}

/**
* Constructeur par liste d'éléments
*/
DTD::DTD( const vector<DTDElement*>& elements)
{
	vElements = vector<DTDElement*>( elements );
}

/**
* Destructeur
*/
DTD::~DTD()
{
	/* Libération de la liste des éléments */
	for( size_t i = 0; i < vElements.size(); i++ )
		delete vElements[i];

	/* Libération de la liste des éléments */
	for( size_t i = 0; i < vAttList.size(); i++ )
		delete vAttList[i];
}

/**
* Retourne la liste des éléments composants la DTD
*/
const vector<DTDElement*>& DTD::getElements() const
{
	return vElements;
}

/**
* Retourne la liste des listes d'attributs composants la DTD
*/
const vector<AttList*>& DTD::getAttList() const
{
	return vAttList;
}

/**
* Retourne la liste des éléments composants la DTD
*/
vector<DTDElement*>& DTD::getElements2()
{
	return vElements;
}

/**
* Retourne la liste des listes d'attributs composants la DTD
*/
vector<AttList*>& DTD::getAttList2()
{
	return vAttList;
}

/**
* Retourne le document sous forme d'une liste de RegExp
*/
map<string, regex> DTD::toRegExp() const
{
	map<string, regex> vReg;
	cout << "DTD Regexp : " << endl;
	/* On parcourt tous les éléments */
	for( size_t i = 0; i < vElements.size(); i++ )
	{
		/* On leur demande de nous donner leur équivalent RegExp et on push */
		//cout << vElements[i]->toRegExp() << endl;
		vReg.insert( vElements[i]->toRegExp() );
	}
	cout << endl;

	return vReg;
}

/**
 * Affiche sur la sortie standard le contenue du DTD
 */
void DTD::printMe()
{
	for( size_t i = 0; i < vElements.size(); i++ )
	{
		vElements[i]->printMe();
	}
	for( size_t i = 0; i < vAttList.size(); i++ )
	{
		vAttList[i]->printMe();
	}
	std::cout << endl;
}
